package com.example.dqhl.jdmetro.utils;

import android.text.TextUtils;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by wangtiansoft_flavin on 17/1/17.
 */

public class StringFormatUtil {
    // 手机号格式校验
    public static boolean cellCheck(String phoneNumber) {
        /*
         * 移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
		 * 联通：130、131、132、152、155、156、185、186 电信：133、153、180、189、（1349卫通）
		 * 总结起来就是第一位必定为1，第二位必定为3、4、5、7、8，其他位置的可以为0-9
		 */
        phoneNumber.trim();
        phoneNumber.replaceAll(" ", "");
        String telRegex = "^[1][34578]\\d{9}$";// "[1]"代表第1位为数字1，"[34578]"代表第二位可以为3、4、5、7、8中的一个，"\\d{9}"代表后面是可以是0～9的数字，有9位。
        if (TextUtils.isEmpty(phoneNumber))
            return false;
        else {
//            Pattern r = Pattern.compile(telRegex);
//            Matcher m = r.matcher(phoneNumber);
//            return m.matches();
            return phoneNumber.matches(telRegex);
        }

    }

    // 邮箱格式校验
    public static boolean emailCheck(String email) {
        if (TextUtils.isEmpty(email)) return false;
        String emailRegex = "\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}";
        String emailRegex2 = "[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?";

        Pattern r = Pattern.compile(emailRegex);
        Matcher m = r.matcher(email);
        return m.matches();
    }

    //2位小数double型转String
    public static String doubleToString(double price) {
        BigDecimal bd = new BigDecimal(price);
        price = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        StringBuffer sbint = new StringBuffer((int) price + "");
        StringBuffer sbdouble = new StringBuffer(price + "");
        if (sbint.length() == sbdouble.length() - 2) {
            sbdouble.append("0");
        } else if (sbint.length() == sbdouble.length()) {
            sbdouble.append(".00");
        }
        return sbdouble.toString();
    }

    public static String intPriceToString(int price) {
        double temp = price / 100;
        return doubleToString(temp);
    }

    //是否为数字
    public static boolean isNumeric(String str) {
        Pattern pattern = Pattern.compile("[0-9]*");
        Matcher isNum = pattern.matcher(str);
        return isNum.matches();
    }

    //  获取文件后缀名
    public static String buildExt(String filePath) {
        if (filePath != null && filePath.length() > 0) {
            int location = filePath.lastIndexOf(".");
            if (location != -1 && location < filePath.length() - 1) {
                return filePath.substring(location + 1);
            }
        }
        return "";
    }

    //  获取文件后缀名 包含.
    public static String buildExtContainDot(String filePath) {
        String extName = buildExt(filePath);
        if (extName != null && !extName.equals("")) {
            return "." + extName;
        }
        return "";
    }

    //  获取文件类型
//    public static MediaType buildMediaType(String filePath) {
//        String ext = buildExt(filePath);
//        if (TextUtils.isEmpty(ext)) {
//            return MediaType.parse("application/octet-stream");
//        } else if (C.app.AUDIO_FORMAT.equals(ext)) {
//            return MediaType.parse("audio/wav");
//        } else {
//            return MediaType.parse(MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext));
//        }
//    }

    /**
     * 格式化时间戳
     *
     * @param dateString String型的时间戳
     * @param format     指定格式
     * @return 格式化后的时间字符串
     */
    public static String dateFormat(String dateString, String format) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            long dateLong = Long.parseLong(dateString);
            Date date = new Date(dateLong);
            String formatDate = sdf.format(date);
            return formatDate;
        } catch (Exception e) {
            return "无";
        }
    }

    /**
     * 将时分转化为时间戳
     *
     * @param hour   小时（24小时制）
     * @param minute 分钟
     * @return 格式化后的时间字符串
     */
    public static String timeToDate(String hour, String minute) {
        try {
            Calendar calendar = Calendar.getInstance();
            int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH);
            int day = calendar.get(Calendar.DAY_OF_MONTH);
            calendar.set(year, month, day, Integer.parseInt(hour), Integer.parseInt(minute));
            return calendar.getTimeInMillis() + "";
        } catch (Exception e) {
            return Calendar.getInstance().getTimeInMillis() + "";
        }
    }

    /**
     * 将完整日期转化为时间戳
     *
     * @param year   年
     * @param month  月
     * @param day    日
     * @param hour   时（24小时制）
     * @param minute 分
     * @param second 秒
     * @return 格式化后的时间字符串
     */
    public static long timeToDate(String year, String month, String day, String hour, String minute, String second) {
        try {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Integer.parseInt(year), Integer.parseInt(month) - 1, Integer.parseInt(day), Integer.parseInt(hour), Integer.parseInt(minute), Integer.parseInt(second));
            return calendar.getTimeInMillis();
        } catch (Exception e) {
            return Calendar.getInstance().getTimeInMillis();
        }
    }

    /**
     * 格式化时间戳
     *
     * @param date   时间戳
     * @param format 指定格式
     * @return 格式化后的时间字符串
     */
    public static String dateFormat(Date date, String format) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            String formatDate = sdf.format(date);
            return formatDate;
        } catch (Exception e) {
            return "无";
        }
    }

    public static String weekIntToString(int cycle) {
        final String[] array = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};
        StringBuffer result = new StringBuffer();
        if (cycle > 0) {
            int index = 0;
            for (int i = 0; i < 7; i++) {
                if ((cycle >> i) % 2 == 1 && 0 <= i && i < array.length)
                    result.append(array[i] + "   ");
            }
        }
        return result.toString();
    }

    public static int weekListToInt(ArrayList<Integer> weekList) {
        int result = 0;
        if (weekList != null) {
            for (int i = 0; i < weekList.size(); i++) {
                int temp = weekList.get(i);
                if (temp > 0)
                    result += (1 << (temp - 1));
            }
        }
        return result;
    }

    /**
     * 掉此方法输入所要转换的时间输入例如（"2014-06-14"）返回时间戳
     *
     * @param time
     * @return
     */
    public static String dateOne(String time) {
        SimpleDateFormat sdr = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
        Date date;
        String times = null;
        try {
            date = sdr.parse(time);
            long l = date.getTime();
            String stf = String.valueOf(l);
            times = stf.substring(0, 13);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return times;
    }

    public static long dateTwo(String time) {
        SimpleDateFormat sdr = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒", Locale.CHINA);
        Date date;
        String times = null;
        try {
            date = sdr.parse(time);
            long l = date.getTime();
            String stf = String.valueOf(l);
            times = stf.substring(0, 13);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return Long.parseLong(times);
    }

    public static long dateThree(String time) {
        SimpleDateFormat sdr = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss", Locale.CHINA);
        Date date;
        String times = null;
        try {
            date = sdr.parse(time);
            long l = date.getTime();
            String stf = String.valueOf(l);
            times = stf.substring(0, 13);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return Long.parseLong(times);
    }

}
